package com.lt.lumentracks.task;

import com.aliyuncs.exceptions.ClientException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.lt.lumentracks.entity.po.TempFile;
import com.lt.lumentracks.service.ITempFileService;
import com.lt.lumentracks.utils.AliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.List;

// 定时任务：每天固定时间点，将【临时文件表】中，创建时间超过 3 天的记录删除
@Slf4j
@Component
public class DelTempFileTask {

    @Autowired
    private ITempFileService tempFileService;
    @Autowired
    private AliOSSUtils aliOSSUtils;


    // 每天晚上11点执行
    @Scheduled(cron = "0 0 23 * * ?") // 秒,分,时,日,月,星期
    // @Scheduled(cron = "0/20 * * * * ?") // 每分钟的20秒执行一次(测试用)
    public void delTempFile() throws ClientException {
        log.debug("开始执行【临时文件表】的删除任务...");
        // 1.计算3天前的时间点
        LocalDateTime threeDaysAgo = LocalDateTime.now().minusDays(3);

        // 2.查询
        LambdaQueryWrapper<TempFile> lqw = new LambdaQueryWrapper<>();
        lqw.lt(TempFile::getCreateTime, threeDaysAgo);
        List<TempFile> list = tempFileService.list(lqw);
        if(list == null || list.isEmpty()){
            log.debug("【临时文件表】暂无数据，任务结束...");
            return;
        }

        // 3.云端存储删除
        for (TempFile tf : list){
            aliOSSUtils.deleteObject(tf.getFileUrl());
        }

        // 4.数据库删除
        boolean isSuccess = tempFileService.remove(lqw);
        if (isSuccess) {
            log.debug("【临时文件表】中，创建时间超过 3 天的记录已删除");
        }
        log.debug("【临时文件表】的删除任务执行完毕！");
    }

}
